package com.softme.trade.view.util;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.softme.trade.model.User;

/**
 * Classe utilitaria para desenvolvimento JSF
 */
public class FacesUtil
{

	/**
	 * Retorna o valor referente ao valor do parametro contido na requisição
	 * 
	 * @param name
	 * @return
	 */
	public static String getRequestParameter(String name)
	{
		return (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
				.get(name);
	}

	/**
	 * Exibe a mensagem de sucesso no jsf
	 * 
	 * @param mensagem
	 */
	public static void showSucessMessage(String mensagem)
	{
		showMessage(FacesMessage.SEVERITY_INFO, mensagem);
	}

	public static void showWarnMessage(String mensagem)
	{
		showMessage(FacesMessage.SEVERITY_WARN, mensagem);
	}

	public static void showErrorMessage(String mensagem)
	{
		showMessage(FacesMessage.SEVERITY_ERROR, mensagem);
	}

	private static void showMessage(FacesMessage.Severity severity, String mensagem)
	{
		FacesMessage facesMessage = new FacesMessage(severity, "", mensagem);
		FacesContext.getCurrentInstance().addMessage(null, facesMessage);
	}

	public static ExternalContext getExternalContext()
	{
		return FacesContext.getCurrentInstance().getExternalContext();
	}

	public static Map getSessionMap()
	{
		return FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
	}

	public static ServletContext getServletContext()
	{
		return (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
	}

	public static HttpServletRequest getServletRequest()
	{
		return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
	}

	public static HttpServletResponse getServletResponse()
	{
		return (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext()
				.getResponse();
	}

	public static void refreshCurrentPage()
	{
		FacesContext context = FacesContext.getCurrentInstance();
		String viewId = context.getViewRoot().getViewId();
		ViewHandler handler = context.getApplication().getViewHandler();
		UIViewRoot root = handler.createView(context, viewId);

		root.setViewId(viewId);
		context.setViewRoot(root);
	}

	/** Insere o usuário logado na sessão
	 * 
	 * @param currentUser
	 */
	public static void setCurrentUser(User currentUser)
	{
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("currentUser", currentUser);
	}

	/** Retorna o usuário corrente da sessão
	 * 
	 * @return
	 */
	public static User getCurrentUser()
	{
		return (User) FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.get("currentUser");
	}
	
	/** Remove o usuário corrente da sessão
	 * 
	 */
	public static void logoutCurrentUser()
	{
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("currentUser");
	}
}
